package com.xjrsoft.module.workflow.mapper;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xjrsoft.module.base.entity.XjrBaseTempfield;
import com.xjrsoft.module.workflow.entity.HiProcessInstance;
import com.xjrsoft.module.workflow.vo.NwfRelationTaskVo;
import com.xjrsoft.module.workflow.vo.TaskVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author:湘北智造-框架开发组
 * @Date:2020/10/20
 * @Description:流程设计信息mapper
 */

@Repository
public interface NwfTaskMapper {

    /**
     * @Author:湘北智造-框架开发组
     * @Date:2020/11/2
     * @Param:[assignee, definitionKey]
     * @return:java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Description:查询待办任务
     */
    IPage<TaskVo> selectBacklog(Page page, @Param("startTime") String startTime,@Param("endTime") String endTime,@Param("keyWord") String keyWord,@Param("assignee") String assignee,@Param("definitionKey") JSONArray definitionKey);


    List<TaskVo> selectAllBacklog( @Param("startTime") String startTime, @Param("endTime")  String endTime, @Param("keyWord")  String keyWord, @Param("assignee")  String assignee, @Param("definitionKey")  JSONArray definitionKey);

    Integer selectAllBacklogCount( @Param("assignee")  String assignee);

    List<TaskVo> selectManualTask( @Param("assignee")  String assignee);
    /**
     * @Author:湘北智造-框架开发组
     * @Date:2020/11/2
     * @Param:[]
     * @return:java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Description:查询已办任务
     */
    IPage<TaskVo> selectHistoryTask(Page page, @Param("startTime")  String startTime,@Param("endTime")  String endTime, @Param("keyWord")  String keyWord,@Param("assignee")  String assignee, @Param("definitionKey")  JSONArray definitionKey);

    /**
     * @Author:湘北智造-框架开发组
     * @Date:2020/11/2
     * @Description:查询已办任务数量
     */
    Integer selectHistoryTaskCount(@Param("assignee") String assignee);

    List<TaskVo> selectAllHistoryTask( @Param("startTime") String startTime,  @Param("endTime") String endTime,  @Param("keyWord") String keyWord, @Param("assignee")  String assignee, @Param("definitionKey")  JSONArray definitionKey);
    /**
     * @Author:湘北智造-框架开发组
     * @Date:2020/11/2
     * @Param:[startTime, endTime, keyWord, assignee, definitionKey]
     * @return:java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Description:查询我的任务
     */
    IPage<TaskVo> selectMyTask(Page page, @Param("startTime")  String startTime, @Param("endTime")  String endTime, @Param("keyWord")  String keyWord, @Param("assignee")  String assignee,  @Param("definitionKey")  JSONArray definitionKey);


    Integer selectMyTaskCount(@Param("assignee") String assignee);

    List<TaskVo> selectAllMyTask( @Param("startTime")  String startTime, @Param("endTime")  String endTime, @Param("keyWord")  String keyWord, @Param("assignee")  String assignee, @Param("definitionKey")  JSONArray definitionKey);
    /**
    * @Author:湘北智造-框架开发组
    * @Date:2021/1/19
    * @Param:[limit, size, startTime, endTime, keyWord]
    * @return:com.alibaba.fastjson.JSONArray
    * @Description:查询关联任务列表
    */
    Page<NwfRelationTaskVo> getRelationTask(Page page, @Param("startTime")  String startTime, @Param("endTime")  String endTime, @Param("keyWord")  String keyWord, @Param("processDefinitionKey")  String processDefinitionKey, @Param("userId")  String userId, @Param("statu")  Integer statu, @Param("authority") Integer authority);


    IPage<TaskVo> selectTaskByParentIds( @Param("parentTaskIds")  List<String> parentTaskIds, IPage page, @Param("startTime")  String startTime, @Param("endTime")   String endTime, @Param("keyWord")   String keyWord, @Param("definitionKey")  JSONArray definitionKey);

    Integer selectTaskCountByParentIds(@Param("parentTaskIds")  List<String> parentTaskIds);

    List<TaskVo> selectAllTaskByParentIds( @Param("parentTaskIds")  List<String> parentTaskIds, @Param("startTime")  String startTime, @Param("endTime")  String endTime, @Param("keyWord")  String keyWord, @Param("definitionKey")  JSONArray definitionKey);

    ArrayList<String> getUserIdByTask( @Param("taskId")  String taskId);

    ArrayList<String> getUserIdByRunTask( @Param("taskId")  String taskId);

    String getResourceIdByHiTask( @Param("taskId")  String taskId);

    String getResourceIdByRunTask( @Param("taskId")  String taskId);

    List<TaskVo> getTaskByRunTask( @Param("taskIds")  List<String> taskIds);

    List<HiProcessInstance> getHiProcessInstanceByProcessInsId( @Param("processInsIds")  List<String> processInsIds);

    List<String> getUserIdIdByHiTask( @Param("taskId")  String taskId);

    Page<XjrBaseTempfield> selectRecycleBin(Page page, @Param("startTime")  String startTime, @Param("endTime")  String endTime, @Param("keyWord")  String keyWord, @Param("assignee")  String assignee, @Param("definitionKey") JSONArray definitionKey);

    List<XjrBaseTempfield> selectAllRecycleBin( @Param("startTime")  String startTime, @Param("endTime")  String endTime,  @Param("keyWord")  String keyWord, @Param("assignee")   String assignee, @Param("definitionKey")  JSONArray definitionKey);

    boolean setStartAssigneeByRun( @Param("assignee")  String assignee, @Param("actId")  String actId,@Param("processInstanceId") String processInstanceId);

    boolean setStartAssigneeByHi( @Param("assignee")  String assignee, @Param("actId")  String actId,@Param("processInstanceId") String processInstanceId);

    boolean setStartUserIdByHi( @Param("userId")  String userId, @Param("processInstanceId") String processInstanceId);

    List<String> getCommentByTaskId( @Param("taskId")  String taskId, @Param("userId")   String userId);

    boolean updateAssigneeByHi( @Param("assignee")  String assignee, @Param("taskId")  String taskId);

    boolean updateAssigneeByRu( @Param("assignee")  String assignee, @Param("taskId")  String taskId);

    boolean updateAssigneeByRuTask( @Param("assignee")  String assignee, @Param("taskId")  String taskId);

    boolean updateAssigneeByHiTask( @Param("assignee")  String assignee, @Param("taskId")  String taskId);

    boolean setEndTime(@Param("taskId") String taskId,@Param("currentTime") LocalDateTime currentTime);

}
